package swing;

// imports -----------------------------------------------------------------
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


import modele.Personne;
import modele.Session;
import dao.SessionDAO;

public class Fenetresession {

	SessionDAO			baseAgri;

	private JTextField	textId_Session;
	private JTextField	textId_formation;
	private JTextField	textDate_Debut;
	private JTextField	textDate_Fin;
	private JTextField	textNbMaxPlaces;
	private JTextField	textTarif;
	private JTextField	textDate_Debutinscri;
	private JTextField	textDate_Fininscri;

	// ------------------------------
	public Fenetresession() {

		try {
			baseAgri = new SessionDAO();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		JFrame fenetreSession = new JFrame();
		fenetreSession.setTitle("Sessions");

		GridLayout g = new GridLayout(10, 2);
		fenetreSession.setLayout(g);

		// Id Session
		JLabel JLabelIds = new JLabel("ID Session :");
		fenetreSession.add(JLabelIds);
		textId_Session = new JTextField();
		fenetreSession.add(textId_Session);
		
		// Id formation
		JLabel JLabelIdf = new JLabel("ID formation :");
		fenetreSession.add(JLabelIdf);
		textId_formation = new JTextField();
		fenetreSession.add(textId_formation);

		// Date début
		JLabel JLabeldd = new JLabel("Date debut:");
		fenetreSession.add(JLabeldd);
		textDate_Debut = new JTextField();
		fenetreSession.add(textDate_Debut);

		// Date fin
		JLabel JLabeldf = new JLabel("Date fin:");
		fenetreSession.add(JLabeldf);
		textDate_Fin = new JTextField();
		fenetreSession.add(textDate_Fin);

		// Nb places
		JLabel JLabelnbp = new JLabel("Nombre places:");
		fenetreSession.add(JLabelnbp);
		textNbMaxPlaces = new JTextField();
		fenetreSession.add(textNbMaxPlaces);
		
		// tarif
		JLabel JLabeltarif = new JLabel("Tarif:");
		fenetreSession.add(JLabeltarif);
		textTarif = new JTextField();
		fenetreSession.add(textTarif);

		// Date début inscri
		JLabel JLabelddi = new JLabel("Date debut inscription:");
		fenetreSession.add(JLabelddi);
		textDate_Debutinscri = new JTextField();
		fenetreSession.add(textDate_Debutinscri);

		// Date début inscri
		JLabel JLabeldfi = new JLabel("Date fin inscription:");
		fenetreSession.add(JLabeldfi);
		textDate_Fininscri = new JTextField();
		fenetreSession.add(textDate_Fininscri);
		// -----------------------------------------------------
		// Jbutton créer
		JButton boutonCreer = new JButton("Creer");
		fenetreSession.add(boutonCreer);
		boutonCreer.addActionListener(new EcouteurCreer());

		// Jbutton lire par id
		JButton boutonLire = new JButton("Lire");
		fenetreSession.add(boutonLire);
		boutonLire.addActionListener(new EcouteurLire());

		// Jbutton supprimer
		JButton boutonEfface = new JButton("Supprimer");
		fenetreSession.add(boutonEfface);
		boutonEfface.addActionListener(new EcouteurEffacer());

		// Jbutton lister
		JButton b1 = new JButton("Lister");
		Ecouteliste lister = new Ecouteliste();
		b1.addActionListener(lister);
		fenetreSession.add(b1);
		fenetreSession.pack();
		fenetreSession.setVisible(true);

		fenetreSession.setSize(450, 300);
		fenetreSession.setVisible(true);
		fenetreSession.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenetreSession.setLocationRelativeTo(null);
		fenetreSession.setResizable(false);
	}

	class EcouteurLire implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			
			int id = Integer.parseInt(textId_Session.getText());
			Session s;
			try {
				s = baseAgri.lireParId(id);

				if (s != null) {
					textId_formation.setText(""+s.getIdFormation());
					textDate_Debut.setText(" "+s.getDateDebut());
					textDate_Fin.setText(" "+s.getDateFin());
					textNbMaxPlaces.setText(" "+s.getNbMaxPlaces());
					textTarif.setText(""+ s.getTarif());
					textDate_Debutinscri.setText(""+s.getDateDebutInscription());
					textDate_Fininscri.setText(""+s.getDateFinInscription());
				} else {
					System.out.println("L'ID session" + id + " n'existe pas.");
				}
			} catch (SQLException e1) {

				e1.printStackTrace();
			}
		}
	}

	class EcouteurEffacer implements ActionListener {
		
		public void actionPerformed(ActionEvent ev) {
			
			int efface = Integer.parseInt(textId_Session.getText());
			try {
			baseAgri.supprimer(efface);
			} 
			catch (SQLException e){
			e.printStackTrace();
			}
			
			System.out.println("La session dont l'ID est " + efface
					+ " a été éffacée.");
		}
	}

	class Ecouteliste implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			List<Session> tableauSession = null;
			try {
				tableauSession = baseAgri.lister();
			} catch (SQLException e1) {

				e1.printStackTrace();
			}
			for (Session s : tableauSession)
				System.out.println(s);
		}
	}

	class EcouteurCreer implements ActionListener {

		
		public void actionPerformed(ActionEvent ev)
		{
			int ids = Integer.valueOf(textId_Session.getText());	
			int idf = Integer.valueOf(textId_formation.getText());					
			String ddebut = textDate_Debut.getText();
			String ddfin = textDate_Fin.getText();
			int nbmaxp = Integer.valueOf(textNbMaxPlaces.getText());
			double tarif = Integer.valueOf(textTarif.getText());
			String ddinscri = textDate_Debutinscri.getText();
			String dfinscri = textDate_Fininscri.getText();
			
	//Date debut -----------------------------------------------
			
			SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
			
			if (ddebut == null || ddebut.matches("^ *$")) {
				//si n'est conforme
			}	
			
			Date datedebut = null;
			try {
				java.util.Date date = df.parse(ddebut);
				datedebut = new java.sql.Date(date.getTime());
				//dateNaissance = (Date) date;
				System.out.println(df.format(datedebut));

				if (ddebut.equals(df.format(datedebut))) {
					//La date doit avoir des jour, mois et année valides");
				}
			} catch (ParseException e) {
				//La date doit être au format jj/mm/aaaa");
			}
			
	//Date fin -----------------------------------------------		
			
			if (ddfin == null || ddfin.matches("^ *$")) {
				//si n'est conforme
			}	

			Date datefin = null;
			try {
				java.util.Date date = df.parse(ddfin);
				datefin = new java.sql.Date(date.getTime());
				//dateNaissance = (Date) date;
				System.out.println(df.format(datefin));

				if (ddfin.equals(df.format(datefin))) {
					//La date doit avoir des jour, mois et année valides");
				}
			} catch (ParseException e) {
				//La date doit être au format jj/mm/aaaa");
			}
				
	 //Date debut inscri---------------------------------------
			
			if (ddinscri == null || ddinscri.matches("^ *$")) {
				//si n'est conforme
			}	

			Date datedebutinscri = null;
			try {
				java.util.Date date = df.parse(ddinscri);
				datedebutinscri = new java.sql.Date(date.getTime());
				//dateNaissance = (Date) date;
				System.out.println(df.format(datedebutinscri ));

				if (ddinscri.equals(df.format(datedebutinscri))) {
					//La date doit avoir des jour, mois et année valides");
				}
			} catch (ParseException e) {
				//La date doit être au format jj/mm/aaaa");
			}
			
	 //Date fin inscri---------------------------------------	
			
			if (dfinscri == null || dfinscri.matches("^ *$")) {
				//si n'est conforme
			}	

			Date datefininscri = null;
			try {
				java.util.Date date = df.parse(dfinscri);
				datefininscri = new java.sql.Date(date.getTime());
				//dateNaissance = (Date) date;
				System.out.println(df.format(datefininscri ));

				if (dfinscri.equals(df.format(datefininscri))) {
					//La date doit avoir des jour, mois et année valides");
				}
			} catch (ParseException e) {
				//La date doit être au format jj/mm/aaaa");
			}
						
			Session s = new Session(ids, idf, datedebut, datefin, nbmaxp, tarif, datedebutinscri, datefininscri);
			try {
				baseAgri.inserer(s);
			} 
			catch (SQLException e) {
				
			e.printStackTrace();
			}		
		}
	}
}
